
\section{Security概览与介绍}

Security是一个基于Java的反射机制，用于SpringMVC与Struts2的超轻量级安全模块。
通过在适当的位置加上不同的安全注解(annotation)，便可实现对应用的安全控制。
并且，不同用途的安全模块彼此是独立的。因此，在实际使用中，可以根据实际需求，
适时的启用模块来实现安全管理。同时，不同的安全模块也能互相自由的组合。
目前实现的安全模块有如下几个:
\begin{itemize}
\item 基于角色的Web访问权限管理
\item 访问来源控制管理
\end{itemize}

\subsection{框架概览与结构实现}
Security是以Spring Framework为基础的。框架会先截获来自客户的访问请求，
将请求处理后，分别传递至注册的安全模块。安全模块根据自身的功能和开发者的配置，
告知框架该请求是否合法，框架会根据安全模块的反馈作出相应的处理操作。

在SpringMVC中，Web的拦截操作是由Resolver来实现的。而在Struts2中，
则是由拦截器来实现的。除了在拦截部分的配置不同之外，余下的配置都是一样的。
拦截器在截获请求后，将会调用 WebCtrlAuthConfiguration 这个类的配置信息，
获取其中所配置的安全模块。接着，将统一化的请求信息传入所配的安全模块中。
安全模块根据传入的信息给予可访问与不可访问的反馈。多个模块的反馈结果
是采用``与''的形式判断的。即只要有一个模块的反馈是不可访问，则安全框架就认为
该请求是非法请求。若框架判断该请求为非法请求，在SpringMVC 和 Struts2
中有不同的操作。在SpringMVC中，框架会将错误信息置于AuthResult参数中，
然后进去处理方法处理。在Struts2中，框架将会根据安全模块的返回，让拦截器
返回相应的Result。

\subsection{安全规则的覆盖}
Security中每个安全模块都有自己相应的Annotation。这些Annotation可出现在
类与成员函数上。当某一个Web请求被截获时，请求所调用的类及相关的成员函数上
的Annotation将被用于判断该请求是否合法。而这两处的规则是以交集的形式进行
合并的，即必须同时让类上的规则与成员方法上的规则同时满足才可。

在Annotation上有一个error的设置，用于自定义错误信息。针对 SpringMVC 与 
Struts2 这个错误信息的意义有些不同。错误信息的设置是会覆盖的。优先级为
成员方法高于类。即，若成员方法上设置了错误代码则返回成员方法的错误代码，
若没有设置，则返回类的错误代码，若类没设置，则返回默认的错误代码。

